home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 60 / IOPROG_60.ISO / soft / c++ / gsl-1.1.1-setup.exe / {app} / include / gsl / gsl_eigen.h < prev    next >
Encoding:
C/C++ Source or Header  |  2002-04-20  |  3.8 KB  |  141 lines

  1. /* eigen/gsl_eigen.h
  2.  * 
  3.  * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman, Brian Gough
  4.  * 
  5.  * This program is free software; you can redistribute it and/or modify
  6.  * it under the terms of the GNU General Public License as published by
  7.  * the Free Software Foundation; either version 2 of the License, or (at
  8.  * your option) any later version.
  9.  * 
  10.  * This program is distributed in the hope that it will be useful, but
  11.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  * General Public License for more details.
  14.  * 
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  */
  19.  
  20. #ifndef __GSL_EIGEN_H__
  21. #define __GSL_EIGEN_H__
  22.  
  23. #include <gsl/gsl_vector.h>
  24. #include <gsl/gsl_matrix.h>
  25.  
  26. #undef __BEGIN_DECLS
  27. #undef __END_DECLS
  28. #ifdef __cplusplus
  29. # define __BEGIN_DECLS extern "C" {
  30. # define __END_DECLS }
  31. #else
  32. # define __BEGIN_DECLS /* empty */
  33. # define __END_DECLS /* empty */
  34. #endif
  35.  
  36. __BEGIN_DECLS
  37.  
  38. typedef struct {
  39.   size_t size;
  40.   double * d;
  41.   double * sd;
  42. } gsl_eigen_symm_workspace;
  43.  
  44. gsl_eigen_symm_workspace * gsl_eigen_symm_alloc (const size_t n);
  45. void gsl_eigen_symm_free (gsl_eigen_symm_workspace * w);
  46. int gsl_eigen_symm (gsl_matrix * A, gsl_vector * eval, gsl_eigen_symm_workspace * w);
  47.  
  48. typedef struct {
  49.   size_t size;
  50.   double * d;
  51.   double * sd;
  52.   double * gc;
  53.   double * gs;
  54. } gsl_eigen_symmv_workspace;
  55.  
  56. gsl_eigen_symmv_workspace * gsl_eigen_symmv_alloc (const size_t n);
  57. void gsl_eigen_symmv_free (gsl_eigen_symmv_workspace * w);
  58. int gsl_eigen_symmv (gsl_matrix * A, gsl_vector * eval, gsl_matrix * evec, gsl_eigen_symmv_workspace * w);
  59.  
  60. typedef struct {
  61.   size_t size;
  62.   double * d;
  63.   double * sd;
  64.   double * tau;
  65. } gsl_eigen_herm_workspace;
  66.  
  67. gsl_eigen_herm_workspace * gsl_eigen_herm_alloc (const size_t n);
  68. void gsl_eigen_herm_free (gsl_eigen_herm_workspace * w);
  69. int gsl_eigen_herm (gsl_matrix_complex * A, gsl_vector * eval,
  70.                          gsl_eigen_herm_workspace * w);
  71.  
  72. typedef struct {
  73.   size_t size;
  74.   double * d;
  75.   double * sd;
  76.   double * tau;
  77.   double * gc;
  78.   double * gs;
  79. } gsl_eigen_hermv_workspace;
  80.  
  81. gsl_eigen_hermv_workspace * gsl_eigen_hermv_alloc (const size_t n);
  82. void gsl_eigen_hermv_free (gsl_eigen_hermv_workspace * w);
  83. int gsl_eigen_hermv (gsl_matrix_complex * A, gsl_vector * eval, 
  84.                            gsl_matrix_complex * evec,
  85.                            gsl_eigen_hermv_workspace * w);
  86.  
  87.  
  88.  
  89. typedef enum {
  90.   GSL_EIGEN_SORT_VAL_ASC,
  91.   GSL_EIGEN_SORT_VAL_DESC,
  92.   GSL_EIGEN_SORT_ABS_ASC,
  93.   GSL_EIGEN_SORT_ABS_DESC
  94. }
  95. gsl_eigen_sort_t;
  96.  
  97. /* Sort eigensystem results based on eigenvalues.
  98.  * Sorts in order of increasing value or increasing
  99.  * absolute value.
  100.  *
  101.  * exceptions: GSL_EBADLEN
  102.  */
  103.  
  104. int gsl_eigen_symmv_sort(gsl_vector * eval, gsl_matrix * evec,
  105.                          gsl_eigen_sort_t sort_type);
  106.  
  107. int gsl_eigen_hermv_sort(gsl_vector * eval, gsl_matrix_complex * evec,
  108.                          gsl_eigen_sort_t sort_type);
  109.  
  110.  
  111. /* The following functions are obsolete: */
  112.  
  113. /* Eigensolve by Jacobi Method
  114.  *
  115.  * The data in the matrix input is destroyed.
  116.  *
  117.  * exceptions: 
  118.  */
  119. int
  120. gsl_eigen_jacobi(gsl_matrix * matrix,
  121.                       gsl_vector * eval,
  122.                       gsl_matrix * evec,
  123.                       unsigned int max_rot, 
  124.                       unsigned int * nrot);
  125.  
  126.  
  127. /* Invert by Jacobi Method
  128.  *
  129.  * exceptions: 
  130.  */
  131. int
  132. gsl_eigen_invert_jacobi(const gsl_matrix * matrix,
  133.                              gsl_matrix * ainv,
  134.                              unsigned int max_rot);
  135.  
  136.  
  137.  
  138. __END_DECLS
  139.  
  140. #endif /* __GSL_EIGEN_H__ */
  141.